package com.billard.mapper;


import com.billard.entity.Reservation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 预约Mapper接口
 */
@Mapper
public interface ReservationMapper {

    /**
     * 查询所有预约
     */
    List<Reservation> selectAll();

    /**
     * 根据ID查询预约
     */
    Reservation selectById(@Param("id") Long id);

    /**
     * 根据状态查询预约
     */
    List<Reservation> selectByStatus(@Param("status") Integer status);

    /**
     * 根据球台ID查询预约
     */
    List<Reservation> selectByTableId(@Param("tableId") Long tableId);

    /**
     * 插入预约
     */
    int insert(Reservation reservation);

    /**
     * 更新预约
     */
    int update(Reservation reservation);

    /**
     * 删除预约
     */
    int deleteById(@Param("id") Long id);

    /**
     * 预约统计（可选时间范围）
     */
    Map<String, Object> selectStatistics(@Param("startDate") String startDate,
                                         @Param("endDate") String endDate);
    
    /**
     * 检查时间冲突
     */
    int checkTimeConflict(@Param("tableId") Long tableId, 
                          @Param("startTime") LocalDateTime startTime, 
                          @Param("endTime") LocalDateTime endTime,
                          @Param("excludeId") Long excludeId);

    /**
     * 查询预约统计
     */
    Map<String, Object> selectReservationStats();
}